package my.soft.aiteacher.teacher.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import my.soft.aiteacher.teacher.mapStruct.QuestionMapStruct;
import my.soft.aiteacher.teacher.mapStruct.QuestionnaireMapStruct;
import my.soft.aiteacher.teacher.mapper.QuestionMapper;
import my.soft.aiteacher.teacher.mapper.QuestionnaireMapper;
import my.soft.aiteacher.teacher.pojo.QuestionDO;
import my.soft.aiteacher.teacher.pojo.QuestionVO;
import my.soft.aiteacher.teacher.pojo.QuestionnaireDO;
import my.soft.aiteacher.teacher.pojo.QuestionnaireVO;
import my.soft.aiteacher.teacher.service.IQuestionnaireService;
import my.soft.aiteacher.utils.RedisIdUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

import static java.util.Arrays.stream;

@Service
public class QuestionnaireServiceImpl extends ServiceImpl<QuestionnaireMapper, QuestionnaireDO> implements IQuestionnaireService {
    @Resource
    private QuestionnaireMapper questionnaireMapper;
    @Resource
    private QuestionMapper questionMapper;
    @Resource
    private QuestionnaireMapStruct questionnaireMapStruct;
    @Resource
    private RedisIdUtils redisIdUtils;
    @Resource
    private QuestionMapStruct questionMapStruct;
    @Override
    public void uploadQuestionnaire(QuestionnaireVO questionnaireVO) {

        QuestionnaireDO questionnaireDO = questionnaireMapStruct.questionnaireVOToQuestionnaireDO(questionnaireVO);
        Long id = redisIdUtils.getId("questionnaire:id");
        questionnaireDO.setId(id);
        questionnaireMapper.insert(questionnaireDO);
        for (QuestionVO questionVO : questionnaireVO.getItems()) {
            questionVO.setQuestionnaireId(id);
            QuestionDO questionDO = questionMapStruct.questionVOToQuestionDO(questionVO);
            questionMapper.insert(questionDO);
        }
    }

    @Override
    public List<QuestionnaireVO> queryQuestionnaire(String fileId) {
        List<QuestionnaireVO> questionnaireVOList = new ArrayList<>();
        List<QuestionnaireDO> questionnaireDOList = questionnaireMapper.selectList(new QueryWrapper<QuestionnaireDO>().eq("file_id", fileId));
        List<Long> questionnaireIdList = questionnaireDOList.stream().map(QuestionnaireDO::getId).toList();
        for (Long questionnaireId : questionnaireIdList) {
            List<QuestionDO> questionDOList = questionMapper.selectList(new QueryWrapper<QuestionDO>().eq("questionnaire_id", questionnaireId));
            List<QuestionVO> questionVOList = questionDOList.stream().map(questionMapStruct::questionDOToQuestionVO).toList();
            QuestionnaireVO questionnaireVO = questionnaireMapStruct.questionnaireDOToQuestionnaireVO(questionnaireMapper.selectById(questionnaireId));
            questionnaireVO.setItems(questionVOList);
            questionnaireVOList.add(questionnaireVO);
        }
        return questionnaireVOList;
    }
}
